"""
@name : 4.16
@author : tnn
@projectname: 天龙八部
"""
#1、输入数字n，输出n天前的日期（time或者datatime模块）
#2、输出指定文件夹下有哪些文件或文件夹（实现ls命令， os）
#3、列表去重，并且从小到大排序
#4、如何在一个函数内部修改全局变量
#5、如何跨模块共享全局变量
#6、python的基本数据类型有哪些？
#7、python中生成随机整数（1-10），随机小数（1-10），随机小数（0-1）的方法
# 8、python中哪些是可变数据类型，哪些是不可变数据类型
#9、a+=1与a=a+1有什么区别
#10、什么是pep8？说出5点它的标准
#11、给定一个字符串，找出字符串第一个重复的字符
#12、简述深拷贝与浅拷贝
#13、简述python内存机制
#14、使用python实现冒泡排序，快速排序
#15、验证一个字符串是否属于回文（从左到右，从右到左都是一样）

#1、输入数字n，输出n天前的日期（time或者datatime模块）
# import datetime
# n = input("请输入查询几天前的日期:")
# date_now = datetime.date.today()
# print(( date_now - datetime.timedelta(days=int(n))).strftime("%Y-%m-%d %H:%M:%S"))

#2、输出指定文件夹下有哪些文件或文件夹（实现ls命令， os）
# import os
# current_dir=os.getcwd()
# print(current_dir)             #获取当前python程序运行路径
# for i in os.listdir(current_dir) :   #列出当前程序下所有文件和文件夹
#     actual_path=os.path.join(current_dir,i)
#     if os.path.isfile(actual_path):
#         print("这是文件:",actual_path)
#     elif os.path.isdir(actual_path):
#         print("这是文件夹:",actual_path)

#3、列表去重，并且从小到大排序
# import numpy as np
# lst = [1,6,3,4,2,4,5,3,4]
# lst_1=np.unique(lst)     #unique()将重复的元素去重后，按从小到大顺序排列返回，是numpy库的一个方法
# print(lst_1)

#4、如何在一个函数内部修改全局变量
# abc='美籍华裔'
# def abcGlobal():
#     global abc        #global可使一个局部变量（local）为全局变量
#     abc = 'ABC'         #由某对象或某个函数所创建的变量通常都是局部变量，只能被内部引用，而无法被其它对象或函数引用。
# abcGlobal()
# print(abc)
# #全局变量既可以是某对象函数创建，也可以是在本程序任何地方创建。全局变量是可以被本程序所有对象或函数引用。

#5、如何跨模块共享全局变量
#config.py-->config_test.py-->run_test.py




# 8、python中哪些是可变数据类型，哪些是不可变数据类型
#6、python的基本数据类型有哪些？
#python的基本数据类型：
# 1.数字类型：整型(int)不可变，浮点型(float)，复数类型(complex)
# 2.字符串类型：str       不可变
# 3.逻辑类型：bool True False none
# 4.列表类型：list [ ] 有序可修改    可变
# 5.元组类型：tuple () 有序不可修改   不可变
# 6.集合类型：set { } 无序不重复      可变
# 7.字典类型：dict {key：value} 无序    可变
#可变和不可变是看地址内存空间是否改变

#7、python中生成随机整数（1-10），随机小数（1-10），随机小数（0-1）的方法
# import random
# integer=random.randint(1,10)     #随机生成整数1-10
# print(integer)
# deci=random.uniform(1,10)     #随机生成小数1-10
# deci_1=random.random()         #随机生成0-1的小数
# print(deci)
# print(deci_1)

#9、a+=1与a=a+1有什么区别    a+=1  等于a = a+1
#当a为字符串类型，不可变，a = a+1,a是字符串类型不能赋值，a+=1,此时a+1有算数运算符，隐式转换a为int类型
#当a为int类型，二者没区别

#10、什么是pep8？说出5点它的标准https://python.freelycode.com/contribution/detail/47
#PEP是Python Enhancement Proposal的缩写，通常翻译为“Python增强提案”。
# 每个PEP都是一份为Python社区提供的指导Python往更好的方向发展的技术文档，
# 其中的第8号增强提案（PEP 8）是针对Python语言编订的代码风格指南。
# 尽管我们可以在保证语法没有问题的前提下随意书写Python代码，但是在实际开发中，
# 采用一致的风格书写出可读性强的代码是每个专业的程序员应该做到的事情，
# 也是每个公司的编程规范中会提出的要求，这些团队开发的时候显得尤为重要。
# 缩进:每级缩进使用4个空格。连续行应该对齐折叠元素
# 制表符还是空格？空格是缩进方法的首选。制表符仅用于与已经用制表符做缩进的代码保持一致。
# 行的最大长度:限制所有行最多79个字符。
# 空行:顶级函数和类的定义之间有两行空行。类内部的函数定义之间有一行空行。额外的空行用来（谨慎地）分离相关的功能组。相关的行（例如：一组虚拟实现）之间不使用空行。
# 源文件编码
# 导入
# 无法忍受的
# 其它建议
# 注释块
# 行内注释
# 文档字符串
# 根本原则
# 描述：命名风格
# 规定：命名约定

#11、给定一个字符串，找出字符串第一个重复的字符
# str = input('请输入字符串：')
# for i in str:
#     if str.count(i) > 1:
#         print(i)
#         break

# 12、简述深拷贝与浅拷贝
# 针对可变容器类型里面包含可变数据类型（容器里面包容器）
# 浅拷贝就是指对象复制的时候只复制一层；深拷贝是指复制对象的所有层级。
# 深浅拷贝的区别：
# 浅拷贝是将原始对象中的数据型字段拷贝到新对象中去，将引用型字段的“引用”复制到新对象中去，不把“引用的对象”复制进去，所以原始对象和新对象引用同一对象，新对象中的引用型字段发生变化会导致原始对象中的对应字段也发生变化。
# 深拷贝是在引用方面不同，深拷贝就是创建一个新的和原始字段的内容相同的字段，是两个一样大的数据段，所以两者的引用是不同的，之后的新对象中的引用型字段发生改变，不会引起原始对象中的字段发生改变。

#13、简述python内存机制
#引用计数为主，分代回收和标记清除为辅的垃圾回收方式，进行内存回收管理
#还引用了小整型缓冲池以及常用字符串驻留区的方式进行内存分配管理
# 如果我们使用==，它将检查两个参数是否包含相同的数据
# 如果我们使用is，那么Python将检查两个对象是否引用相同的对象，此时两个对象的id必须相同


#14、使用python实现冒泡排序，快速排序
# 它重复地遍历要排序的数列，一次比较两个元素，如果它们的顺序错误就把它们交换过来，直到数列已经排序完成。
# #冒泡排序
# # 定义函数名称，传入lis
# def bubbleSort(lis):
#     # 计算传入的列表长度
#     len_lis = len(lis)
#     # 做双层循环
#     for i in range(len_lis - 1):
#         # 内层循环减去已经循环的值
#         for j in range(len_lis - 1 - i):
#             # 此处大小决定是降序还是升序
#             if lis[j] < lis[j + 1]:
#                 lis[j], lis[j + 1] = lis[j + 1], lis[j]
#     return lis
#
#
# lis = [3, 5, 8, 1, 2, 10, 6]
# print(bubbleSort(lis))
# # 快速排序法
# def quickSort(lis):
#     # 计算列表长度
#     len_lis = len(lis)
#     # 如果列表的长度已经小于2，则可以将列表 返回
#     if len_lis < 2:
#         return lis
#     # 设置基准值为lis[0]
#     basevalue = lis[0]
#     # 将小于基准值放在列表中
#     left_lis = []
#     # 将大于基准值放在此列表中
#     righ_lis = []
#     # 对列表进行循环
#     for i in range(1, len_lis):
#         # 判断值是否小于基准
#         if lis[i] < basevalue:
#             left_lis.append(lis[i])
#         else:
#             righ_lis.append(lis[i])
#     # 递归调用
#     return quickSort(left_lis) + [basevalue] + quickSort(righ_lis)
#
# lis = [3, 5, 8, 1, 2, 10, 6]
# print(quickSort(lis))

#15、验证一个字符串是否属于回文（从左到右，从右到左都是一样）
# n = input("请输入一个字符串:")
# l = len(n)
# i = 0
# count = 1
# while i <=(l/2):
#     if n[i] == n[l-i-1]:
#         count =1
#         i +=1
#     else:
#         count =0
#         break
# if count == 1:
#     print("您输入的字符串是回文")
# else:
#     print("您输入的字符串不是回文")